package map;

import java.util.*;

// Map的三种遍历方式：遍历所有的key、遍历所有的键值对、遍历所有的value(相对不常用)
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("语文",99);
        map.put("数学",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",99);
        System.out.println(map);

        /** 遍历所有的key */
        //将当前Map中所有的key已一个Set集合形式返回
        Set<String> keySet = map.keySet();//set最的特点就是不能重复
        for (String key : keySet){//key的实例:遍历的集合  从集合中拿到每个元素
            System.out.println("key:"+key);
        }

        /** 遍历所有的键值对 */
        //将当前Map中所有的键值对以一个Set集合形式返回，每一组键值对以一个Entry实例形式表示。
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        for (Map.Entry<String,Integer> e : entrySet){
            String key = e.getKey();
            Integer value = e.getValue();
            System.out.println(key+","+value);
        }

        /** 遍历所有的value */
        Collection<Integer> values = map.values();//因为values的值是可以重复的，所有不使用Set<>
        for (Integer value : values){
            System.out.println("value:"+value);
        }

        /** JDK8之后，集合和Map都提供了forEach方法，基于lambda表达式遍历  */
        Collection<String> c = new ArrayList<>();
        c.add("one");
        c.add("two");
        c.add("three");
        c.add("four");
        //新循环遍历
        for(String s : c){
            System.out.println(s);
        }
        //forEach
        c.forEach(s -> System.out.println(s));
        //Map也支持forEach方法
        map.forEach((k,v) -> System.out.println(k+":"+v));
    }
}
